package com.logentries.log4j2; import org.apache.logging.log4j.core.Filter; import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.appender.AbstractAppender; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.config.plugins.PluginAttribute; import org.apache.logging.log4j.core.config.plugins.PluginElement; import org.apache.logging.log4j.core.config.plugins.PluginFactory; import org.apache.logging.log4j.core.layout.PatternLayout; import java.io.Serializable; /** * Log4J2 Appender that writes to Logentries. * <p/> * Created by josh on 11/15/14. */ @Plugin(name = "Logentries", category = "Core", elementType = "appender", printObject = true) public final class LogentriesAppender extends AbstractAppender { private final LogentriesManager manager; protected LogentriesAppender(String name, Filter filter, Layout<? extends Serializable> layout, boolean ignoreExceptions, LogentriesManager manager) { super(name, filter, layout, ignoreExceptions); this.manager = manager; } @PluginFactory public static LogentriesAppender createAppender(@PluginAttribute("name") String name, @PluginAttribute("token") String token, @PluginAttribute("key") String key, @PluginAttribute("location") String location, @PluginAttribute("httpPut") boolean httpPut, @PluginAttribute("ssl") boolean ssl, @PluginAttribute("debug") boolean debug, @PluginAttribute("useDataHub") boolean useDataHub, @PluginAttribute("dataHubAddr") String dataHubAddr, @PluginAttribute("dataHubPort") int dataHubPort, @PluginAttribute("logHostName") boolean logHostName, @PluginAttribute("hostName") String hostName, @PluginAttribute("logID") String logID, @PluginAttribute("ignoreExceptions") boolean ignoreExceptions, @PluginElement("Layout") Layout<? extends Serializable> layout, @PluginElement("Filters") Filter filter) { if (name == null) { LOGGER.error("No name provided for LogentriesAppender"); return null; } if (token == null) { LOGGER.error("No token provided for LogentriesAppender"); return null; } FactoryData data = new FactoryData(token, key, location, httpPut, ssl, debug, useDataHub, dataHubAddr, dataHubPort, logHostName, hostName, logID); LogentriesManager manager = LogentriesManager.getManager(name, data); if (manager == null) return null; if (layout == null) layout = PatternLayout.createDefaultLayout(); return new LogentriesAppender(name, filter, layout, ignoreExceptions, manager); } @Override public void append(LogEvent event) { final Layout<? extends Serializable> layout = getLayout(); String line = new String(layout.toByteArray(event)); manager.writeLine(line); } }